package likou;


/**
 * @author: 唐小尊
 * @email: 1171702529@qq.com
 * @cate: 2021/08/21 09:17
 */
public class _121 {
    public static void main(String[] args) {
        System.out.println(maxProfit(new int[]{7, 1, 5, 3, 6, 4}));
    }

    public static int maxProfit(int[] prices) {
        int[] states = new int[2];//0:买，1:卖
        // 买：前面的最大值去买。
        // 卖：最小的去卖，相加。
        // 不动：继承前面的最大值
        states[0] = -prices[0];
        for (int i = 1; i < prices.length; i++) {
            states[1] = Math.max(states[1], states[0] + prices[i]);
            //由于只能买一次，所以每次的买的值，都要直接改变，而不是由之前的卖后值—当前的价格（二次购买）。
            states[0] = Math.max(states[0], -prices[i]);
        }
        return states[1];
    }

    public int maxProfit2(int[] prices) {
        int min = prices[0];
        int res = 0;
        for (int price : prices) {
            if (min >= price) {
                min = price;
                continue;
            }
            res = Math.max(price - min, res);
        }
        return res;
    }
}
